Computer-aided design (CAD) software allows a user to construct and manipulate complex three-dimensional (3D) models. A number of different modeling techniques can be used to create a 3D model. These techniques include solid modeling, wire-frame modeling, and surface modeling. Solid modeling techniques provide for topological 3D models, where the 3D model is a collection of interconnected topological entities (e.g., vertices, edges, and faces). The topological entities have corresponding supporting geometrical entities (e.g., points, trimmed curves, and trimmed surfaces). The trimmed surfaces correspond to the topological faces bounded by the edges. Wire-frame modeling techniques, on the other hand, can be used to represent a model as a collection of simple 3D lines, whereas surface modeling can be used to represent a model as a collection of exterior surfaces. CAD modeling using solid modeling techniques is widely used for industrial design and other applications requiring high-quality rendering.
A solid model may be represented by a boundary representation (B-rep), which consists of trimmed parametric surfaces with inter-references that maintain the topology of the model. For example, an edge shared by neighboring faces will have references (sometimes called half-edges or edge-uses) to both faces.
A design engineer is a typical user of a 3D CAD system. The design engineer designs physical and aesthetic aspects of 3D models, and is skilled in 3D modeling techniques. The design engineer creates parts and may assemble the parts into one or more subassemblies and assemblies. During the design process, a high quality rendering of the 3D model is often desired to present the model as a real-world object or to include with the model special effects.
Traditional rendering methods preprocess a model into a tessellation stored in a computer-processing unit (CPU) memory and use the tessellation for rendering. As graphics processing units (GPUs) became common components of CAD systems, interactively rendering solid models involved tessellating the models using a CPU and then transmitting the tessellation to a GPU for further processing.
Often, a design engineer may want to produce a transparent or semi-transparent rendering of a 3D model or parts thereof. This aids the design engineer in visualizing the inside of a model and objects located behind the 3D model or parts thereof. Order Independent Transparency (OIT) provides an improved look to transparency with significantly improved performance, including dynamic performance. Utilizing the OIT technique allows for rendering overlapping semi-transparent objects without having to sort the objects before they are being rendered, and thereby, improves the accuracy and quality of the rendering while also improving the performance.
One of the main problems with existing solutions for semi-transparent rendering of solid models is the amount of time it takes to render a complex model and the appearance of a model. The appearance may not be realistic due to pixel values that are incorrectly calculated. For example, the fragments chosen for the calculation of the pixel value may be the incorrect subset of fragments. A fragment is data (e.g., color and depth) of the object at a location corresponding to a particular pixel location. Since many objects may pass through the same pixel location, many fragments need to be considered when calculating the pixel value. To create a semi-transparent image, those fragments (which may be many), are blended together to calculate a pixel value. Some rendering techniques, however, may not even consider each fragment for a given pixel location, thereby creating an unrealistic appearance.
A blending process is what creates semi-transparent renderings. Blending, a technique known by those skilled in the art, involves using two or more color values as input and outputs a new color value that is a combination of the input color values.
Other rendering techniques use a depth buffer (e.g., a Z-buffer), which do not always work correctly for transparent and semi-transparent renderings, and combinations thereof. This is because for a transparent rendering the fragment furthest from the viewer needs to be rendered first so closer fragments can be blended correctly with those fragments further away. However, in general, a Z-buffer only stores one layer, which is the layer closest to the eye of the viewer.
Depth peeling is another technique known by those skilled in the art. Depth peeling processes many layers and is processor intensive because this technique requires multiple passes, where each pass renders the same pixels again.
Additionally, a drawback of current state-of-the-art rendering techniques includes the existence of undesirable artifacts that misrepresent the 3D model. And in many cases, the wrong set of fragments are chosen and blended into a pixel value. For example, the fragments that contribute to the resulting pixel value are not necessarily fragments closest to the viewer. A system or method that addresses this and other drawbacks would greatly enhance current state-of-the-art computerized systems by allowing the high quality transparent rendering of a 3D model without the undesirable artifacts.